﻿using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;

namespace Acaweb.Servicios.Contracts
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ICursosMatriculadosService" in both code and config file together.
    [ServiceContract]
    public interface ICursosMatriculadosService
    {
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Docente })]
        [WebInvoke(Method = "POST", UriTemplate = "GetById", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        CursosMatriculados GetById(CursosMatriculadosPk Curso);


        [WebInvoke(Method = "POST", UriTemplate = "GetByCurso", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> GetByCurso(CursoPk Curso);

        /// <summary>
        /// Provee las cursos matriculados por un estudiante a lo largo de su vida académica
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "GetByEstudiante", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> GetByEstudiante(int CodigoEstudiante);

        /// <summary>
        /// Provee las cursos matriculados por un estudiante a lo largo de su vida académica
        /// </summary>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "_GetByEstudiante", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> _GetByEstudiante();

        /// <summary>
        /// Provee los cursos matriculados por un estudiante en un Periodo Académico
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <param name="PeriodoAcademico"></param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "GetByEstudianteAndPeriodoAcademico", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> GetByEstudianteAndPeriodoAcademico(PeriodoAcademico PeriodoAcademico);

        /// <summary>
        /// Matricula un Estudiante en un Curso
        /// </summary>
        /// <param name="CursoMatriculado"></param>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Administrativo, Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "Create", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        Acaweb.Servicios.Utility.ServiceResponse Create(CursosMatriculados CursoMatriculado);

        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "SolicitarRetiro", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        void SolicitarRetiro(CursosMatriculados CursoMatriculado);

        /// <summary>
        /// Provee los cursos matriculados aprobados por un estudiante
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "GetAprobados", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> GetAprobados(int CodigoEstudiante);

        /// <summary>
        /// Provee los cursos matriculados no aprobados por un estudiante
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "GetNoAprobados", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> GetNoAprobados();


        /// <summary>
        /// Provee los cursos matriculados por un estudiante y aprobado
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "_GetAprobados", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<CursosMatriculados> _GetAprobados();

        /// <summary>
        /// Provee los cursos matriculados por un estudiante y aprobado
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante, Acaweb.Servicios.Utility.Ambitos.Administrativo })]
        [WebInvoke(Method = "POST", UriTemplate = "IsValid", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        bool IsValid(List<CursosMatriculados> Lista);
    }
}
